package com.tianji.promotion.utils;

import lombok.extern.slf4j.Slf4j;
import org.springframework.retry.annotation.Backoff;
import org.springframework.retry.annotation.Recover;
import org.springframework.retry.annotation.Retryable;
import org.springframework.stereotype.Component;

/**
 * @author Administrator
 * @version 1.0
 * @description: TODO
 * @date 2025/4/3 18:35
 */
@Slf4j
@Component
public class SpringRetryBusiness {
    boolean flag = true;

    @Retryable(
            value = {InterruptedException.class}, // 重试的异常类型
            maxAttempts = 3,                      // 最大重试次数（包括第一次调用）
            backoff = @Backoff(
                    delay = 2000,                     // 初始延迟时间2秒
                    multiplier = 2                   // 延迟时间倍数
            )
    )
    public void businessMethos() throws InterruptedException {
        log.warn("业务方法执行了...");
        if (flag) {
            throw new InterruptedException();
        }
        log.warn("业务方法执行结束了...");
    }

    @Recover
    public void recoverClearPointsBoard(InterruptedException e) {
        // 记录日志或执行其他恢复逻辑
        log.error("业务方法执行失败，已达到最大重试次数", e);

        // 可以在这里添加其他恢复逻辑，比如将任务放入队列稍后重试等
    }
}
